package com.xbai.spark.core.action

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * reduce(func) 算子
  * 作用：通过 func 函数聚集 RDD 中的所有元素，先聚合分区内数据，再聚合分区间数据
  * 案例：创建一个RDD，将所有元素聚合得到结果
  *
  * @author xbai
  * @Date 2020/12/31
  */
object Spark01_Reduce {

  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("reduce")
    val sc = new SparkContext(conf)

    val rdd: RDD[Int] = sc.makeRDD(1 to 10,2)
    println(rdd.reduce(_ + _))

    val rdd2: RDD[(String, Int)] = sc.makeRDD(Array(("a",1),("a",3),("c",3),("d",5)))
    println(rdd2.reduce((x, y) => (x._1 + y._1, x._2 + y._2)))

    sc.stop()
  }
}
